NB : Ce script est un document de travail.
Il étudie les communes nouvelles en se focalisant sur les différences entre les communes fusionnantes et leurs voisines.
Il est mis à disposition dans une logique de science ouverte.
Ce travail s’inscrit dans le cadre d’une étude plus générale sur les communes nouvelles :
https://cv.hal.science/gabriel-bideau
Licence CC-BY-NC-SA.
Il est possible d’accéder au code de ce Markdown ici : https://gbideau.github.io/CN_etude_voisines/etude_voisines.Rmd
Les données utilisées pour jouer le code sont regroupées ici : https://gbideau.github.io/CN_data/CN_data.zip
Ne pas hésiter à contacter l’auteur (gabriel.bideau@gmail.com) pour toute question.
Regarder la différence entre une commune et ses voisines. Catégoriser en fonction des communes fusionnantes, des autres etc. : réflexion à l’aide d’une boucle pour voir des écarts entre les communes voisines. Sur une variable donnée (taux de chômage, taux d’endettement etc) et pour chaque commune ayant fusionné : • quelle est la moyenne des différences entre cette commune et chacune de ces communes limitrophes avec lesquelles elle n’a pas fusionné ; • quelle est la moyenne des différences entre cette commune et chacune des communes limitrophes (ou non ?) avec lesquelles elle a fusionné.
variables_budg <- c("dgf_prct", "charge_prct", "perso_prct", "depinv_prct", "equip_prct", "dette_prct")
selecVar_elect_2012 <- c("PR2012_T1_Abst_prct_insc", "PR2012_T1_prct_insc_LE.PEN", "PR2012_T1_prct_insc_SARKOZY", "PR2012_T1_prct_insc_MÉLENCHON", "PR2012_T1_prct_insc_BAYROU", "PR2012_T1_prct_insc_HOLLANDE")
selecVar_elect_2017 <- c("PR2017_T1_Abst_prct_insc", "PR2017_T1_prct_insc_LE.PEN", "PR2017_T1_prct_insc_FILLON", "PR2017_T1_prct_insc_MÉLENCHON", "PR2017_T1_prct_insc_MACRON", "PR2017_T1_prct_insc_HAMON")
selecVar_elect_2022 <- c("PR2022_T1_Abst_prct_insc", "PR2022_T1_prct_insc_LE.PEN", "PR2022_T1_prct_insc_MACRON", "PR2022_T1_prct_insc_MÉLENCHON", "PR2022_T1_prct_insc_ZEMMOUR")
liste_variables <- list("P09_CHOM1564_RT", "C09_ACTOCC_OUT_RT", "P11_FoyFisc_Imp_RT", "C09_ACT1564_Agr_RT", "superficie", "P09_POP0014Y_RT", "P09_POP1529Y_RT", "P09_POP6074Y_RT",
selecVar_elect_2012, selecVar_elect_2017, selecVar_elect_2022,
variables_budg,
c("P09_CHOM1564_RT", "C09_ACTOCC_OUT_RT", "C09_ACT1564_Agr_RT"))
liste_variables <- list("P09_CHOM1564_RT", "C09_ACTOCC_OUT_RT", "P11_FoyFisc_Imp_RT", "C09_ACT1564_Agr_RT", "superficie", "P09_POP0014Y_RT", "P09_POP1529Y_RT", "P09_POP6074Y_RT", "P09_POP",
selecVar_elect_2012, selecVar_elect_2017, selecVar_elect_2022,
"PR2022_T1_Abst_prct_insc", "PR2022_T1_prct_insc_LE.PEN", "PR2022_T1_prct_insc_MACRON", "PR2022_T1_prct_insc_MÉLENCHON", "PR2022_T1_prct_insc_ZEMMOUR",
variables_budg,
"dgf_prct", "charge_prct", "perso_prct", "depinv_prct", "equip_prct", "dette_prct",
c("P09_CHOM1564_RT", "C09_ACTOCC_OUT_RT", "C09_ACT1564_Agr_RT"))
# Si on veut étudier les variables une par une, pas par blocs
liste_variables_uniques <- unique(unlist(liste_variables))
# En excluant les variables politiques (qui ne sont traitées qu'en listes)
liste_variables_uniques_sans_polit <- liste_variables_uniques[-which(str_detect(liste_variables_uniques, "PR20") == TRUE)]
load("data/refdata.Rdata")
load("data/refdata_budgets_2011-2022.Rdata")
dep <- st_read("data/geom.gpkg", layer = "dep", quiet = TRUE)
geom2011 <- st_read("data/geom.gpkg", layer = "geom2011", quiet = TRUE)
# geomfus2011 <- st_read("data/geom.gpkg", layer = "geomfus2011", quiet = TRUE)
datafus2011 <- subset(df2011, COM_NOUV == "OUI")
# Import des données électorales 2012 et 2022 aux géométries auxquelles elles sont publiées
noms_scrutins_presid <- c("PR2012_T1")
for (nom_scrutin in noms_scrutins_presid) {
scrutin <- read.table(paste0("data/elections/", nom_scrutin, ".csv"), sep="\t", colClasses = "character", head = TRUE, stringsAsFactors = TRUE) # Pour connaître la longueur du tableau
scrutin <- read.table(paste0("data/elections/", nom_scrutin, ".csv"), sep="\t", colClasses = c(rep("character", 2), rep("numeric", length(scrutin) -2)), head = TRUE, stringsAsFactors = TRUE, dec =",")
assign(nom_scrutin, scrutin)}
# Import des données électorales compilées
noms_scrutins_presid_df2011 <- c("PR2017_T1", "PR2022_T1")
# Import données concernant les communes fusionnantes à partir des bureaux de vote
for (nom_scrutin in noms_scrutins_presid_df2011) {
scrutin <- read.table(paste0("data/elections/", nom_scrutin, "_geom2011.csv"),
sep="\t", colClasses = "character", head = TRUE, stringsAsFactors = TRUE)
# On refait l'import maintenant qu'on connaît la longueur du tableau, en spécifiant le type de données
scrutin <- read.table(paste0("data/elections/", nom_scrutin, "_geom2011.csv"), sep="\t", colClasses = c(rep("character", 13), rep("numeric", length(scrutin) -13)), head = TRUE, stringsAsFactors = TRUE, dec =",")
assign(paste0("df2011_", nom_scrutin), scrutin)}
rm(scrutin, nom_scrutin)
colnames(PR2012_T1) <- paste0("PR2012_T1_", colnames(PR2012_T1))
colnames(df2011_PR2017_T1)[14:ncol(df2011_PR2017_T1)] <- paste0("PR2017_T1_", colnames(df2011_PR2017_T1)[14:ncol(df2011_PR2017_T1)])
colnames(df2011_PR2022_T1)[14:ncol(df2011_PR2022_T1)] <- paste0("PR2022_T1_", colnames(df2011_PR2022_T1)[14:ncol(df2011_PR2022_T1)])
test_geom <- merge(geom2011, df2011, by = "CODGEO")
colnames(test_geom)
## [1] "CODGEO" "LIBGEO"
## [3] "CODE_DEPT" "CATAEU2010"
## [5] "REG" "ARR"
## [7] "CV" "UU2010"
## [9] "AU2010" "ZE2010"
## [11] "EPCI" "P09_ACT1564"
## [13] "P09_CHOM1564" "P09_ETUD1564"
## [15] "P09_RETR1564" "C09_ACT1564_Agr"
## [17] "C09_ACT1564_ArtCom" "C09_ACT1564_Cadr"
## [19] "C09_ACT1564_ProfInt" "C09_ACT1564_Empl"
## [21] "C09_ACT1564_Ouvr" "P09_EMPLT"
## [23] "C09_EMPLT_AGRI" "C09_EMPLT_INDUS"
## [25] "C09_EMPLT_CONST" "C09_EMPLT_CTS"
## [27] "C09_EMPLT_APESAS" "P09_ACTOCC"
## [29] "P09_POP" "P09_POP0014"
## [31] "P09_POP1529" "P09_POP3044"
## [33] "P09_POP4559" "P09_POP6074"
## [35] "P09_POP75P" "C09_ACTOCC_IN"
## [37] "C09_ACTOCC_OUT" "C09_ACTOCC"
## [39] "P11_POT_FIN" "P11_DGF"
## [41] "P11_FoyFisc" "P11_Rev_Fisc"
## [43] "P11_IMP_NET" "P11_FoyFisc_Imp"
## [45] "superficie" "ZAU_POL"
## [47] "ZAU_RUR" "ZAU_MAR_SP"
## [49] "ZAU_MAR" "ZAU_PERI"
## [51] "ZAU_AU" "FUSION"
## [53] "ChefLieu" "ComDLG"
## [55] "FusDate" "FusPhas"
## [57] "COM_NOUV" "CODGEO_new"
## [59] "LIBGEO_new" "P09_CHOM1564_RT"
## [61] "P09_ETUD1564_RT" "P09_RETR1564_RT"
## [63] "C09_ACT1564_Agr_RT" "C09_ACT1564_ArtCom_RT"
## [65] "C09_ACT1564_Cadr_RT" "C09_ACT1564_ProfInt_RT"
## [67] "C09_ACT1564_Empl_RT" "C09_ACT1564_Ouvr_RT"
## [69] "C09_EMPLT_AGRI_RT" "C09_EMPLT_INDUS_RT"
## [71] "C09_EMPLT_CONST_RT" "C09_EMPLT_CTS_RT"
## [73] "C09_EMPLT_APESAS_RT" "P09_POP0014Y_RT"
## [75] "P09_POP1529Y_RT" "P09_POP3044Y_RT"
## [77] "P09_POP4559Y_RT" "P09_POP6074Y_RT"
## [79] "P09_POP75PY_RT" "C09_ACTOCC_IN_RT"
## [81] "C09_ACTOCC_OUT_RT" "C09_EMP_CONC_RT"
## [83] "P11_POT_FIN_RT" "P11_DGF_RT"
## [85] "P11_Rev_Fisc_RT" "P11_IMP_NET_RT"
## [87] "P11_FoyFisc_Imp_RT" "pop_legale_budgets"
## [89] "nomsst1" "nomsst2"
## [91] "prod" "impo1"
## [93] "impo2" "dgf"
## [95] "charge" "perso"
## [97] "achat" "subv"
## [99] "res1" "recinv"
## [101] "fctva" "depinv"
## [103] "equip" "remb"
## [105] "res2" "dette"
## [107] "annu" "fdr"
## [109] "bth" "bfb"
## [111] "bfnb" "pth"
## [113] "pfb" "pfnb"
## [115] "tth" "Pop_INSEE"
## [117] "Pop_DGF" "DotationNmoins1PerimN"
## [119] "PotFin4taxes" "Effort_fiscal"
## [121] "Voirie_en_m" "Dotation_forfaitaireN"
## [123] "DSU_tot" "DNP_princip"
## [125] "DNP_sortie" "DNP_major"
## [127] "DNP_tot" "DSR_bourg_centre_global"
## [129] "DSR_pereq_global" "DSR_cible_global"
## [131] "fprod" "fimpo1"
## [133] "fimpo2" "fdgf"
## [135] "fcharge" "fperso"
## [137] "fachat" "fsubv"
## [139] "fres1" "frecinv"
## [141] "ffctva" "fdepinv"
## [143] "fequip" "fremb"
## [145] "fres2" "fdette"
## [147] "fannu" "ffdr"
## [149] "fbth" "fbfb"
## [151] "fbfnb" "fpth"
## [153] "fpfb" "strateCN"
## [155] "surface" "densite"
## [157] "depenses_tot" "prod_prct"
## [159] "impo1_prct" "impo2_prct"
## [161] "dgf_prct" "charge_prct"
## [163] "perso_prct" "achat_prct"
## [165] "subv_prct" "res1_prct"
## [167] "recinv_prct" "fctva_prct"
## [169] "depinv_prct" "equip_prct"
## [171] "remb_prct" "res2_prct"
## [173] "dette_prct" "annu_prct"
## [175] "fdr_prct" "bth_prct"
## [177] "bfb_prct" "bfnb_prct"
## [179] "pth_prct" "pfb_prct"
## [181] "pfnb_prct" "tth_prct"
## [183] "DotationNmoins1PerimN_prct" "PotFin4taxes_prct"
## [185] "Dotation_forfaitaireN_prct" "DSU_tot_prct"
## [187] "DNP_princip_prct" "DNP_sortie_prct"
## [189] "DNP_major_prct" "DNP_tot_prct"
## [191] "DSR_bourg_centre_global_prct" "DSR_pereq_global_prct"
## [193] "DSR_cible_global_prct" "geometry"
test_geom <- merge(test_geom, PR2012_T1, by.x = "CODGEO", by.y = "PR2012_T1_CODGEO", all.x = TRUE)
test_geom <- merge(test_geom, df2011_PR2017_T1, by = "CODGEO", all.x = TRUE)
test_geom <- merge(test_geom, df2011_PR2022_T1, by = "CODGEO", all.x = TRUE)
test_geom$P09_POP <- as.numeric(test_geom$P09_POP)
CategZAU <- c("Unité urbaine\nd'un grand pôle", "Couronne d'un\ngrand pôle", " Multipolarisée des\ngrandes aires\nurbaines", "Unité urbaine\nd'un pôle moyen", "Couronne d'un\npôle moyen", "Unité urbaine\nd'un petit pôle", "Couronne d'un\npetit pôle", "Autre commune\nmultipolarisée", "Commune isolée\nhors influence\ndes pôles")
Les communes, lorsqu’elles fusionnent, n’ont en fait qu’un nombre de choix limité. En effet, la création d’une commune nouvelle n’est possible que pour un ensemble continu (et sans enclave), c’est-à-dire que les communes ne peuvent fusionner, cela paraît logique, qu’avec leurs voisines. Il est donc utile d’intégrer la question de la contiguïté pour déterminer si les communes choisissent, parmi leurs voisines, des communes plutôt similaires ou différentes. Au moment du codage de ces éléments, on choisit de considérer des communes contigües à partir du moment où elles se touchent par un point (soit le voisinage « Reine » ou « Queen », par analogie avec le jeu d’échecs) puisque le faite de partager un segment de frontière (voisinage « Tour » ou « Rook ») n’est pas nécessaire. Cette différence est faible dans le cas des communes françaises mais pas tout à fait nulle. Ainsi, dans la carte suivante sur les communes du Maine-et-Loire, on a rajouté en rouge les contigüités qui n’existent que lorsqu’on prend en compte le modèle de la Reine, ce qui n’est pas inexistant (les liens bleus étant ceux des voisinages « Tour », qui existent uniquement en cas de voisinage « Reine » (Bellefon, Loonis et Le Gleut 2018).
library(spdep)
test_geom_carte <- merge(geom2011, df2011[, c("CODGEO", "CODE_DEPT", "COM_NOUV", "P09_POP", "LIBGEO")], by = "CODGEO")
test_geom_carte <- subset (test_geom_carte, CODE_DEPT == "49" )
test_queen <- poly2nb(test_geom_carte, queen = TRUE)
test_rook <- poly2nb(test_geom_carte, queen = FALSE)
# On change de type d'objet pour faciliter les représentations
test_geom_carte <- as(test_geom_carte, "Spatial")
# Représentation graphique des deux manières de calculer les voisinages dans le cas du département du Maine-et-Loire
plot(test_geom_carte, border="lightgray", main = "Le voisinage des communes\ndans le département du Maine-et-Loire (49)",
cex.main=1, # taille titre
font.main=1, # type (1 : normal, 2 : gras)
)
plot(test_queen, coordinates(test_geom_carte),add=TRUE,col="red")
plot(test_rook, coordinates(test_geom_carte),add=TRUE,col="blue")
legend(title = "Type de voisinage", x="bottomright", legend=c("« Tour »","Uniquement « Reine »"), col=c("blue","red"),
lty=1, # type de figuré dans la légende
cex=0.7, # taille légende
box.lty=0, # supprime bordure
bg=NA # Pas de couleur en arrière-plan de la légende
)
Une fois cette matrice de voisinage définie, il n’est pas aisé de sélectionner la mesure qui permettra de rendre compte des différences entre communes voisines. Une première solution est d’observer la distance statistique entre une commune fusionnante donnée et ses communes limitrophes. la distance statistique est une mesure synthétisant la proximité de valeurs, dans notre cas principalement des pourcentages. Pour calculer cette distance statistique, la métrique euclidienne est ici utilisée car ce choix est souvent fait dans des sujets potentiellement destinés à des acteurs publics, du fait de sa facilité de lecture (c’est par exemple le choix fait au sein du programme Espon – European Observation Network for Territorial Development and Cohesion). Il faut noter qu’on ne peut, en revanche, pas déduire de cette distance statistique que telle ou telle commune serait plus favorisée qu’une autre : une distance statistique importante n’indique pas si la commune de référence est favorisée ou non du point de vue de la variable étudiée ; elle n’indique d’ailleurs pas si cette différence est positive ou négative, elle indique simplement l’éloignement des variables. Cette distance statistique peut être calculée pour une variable donnée (par exemple la superficie) ou pour un ensemble de variables (par exemple différentes variables budgétaires. On calcule donc, d’un côté, la moyenne des distances statistiques entre une commune fusionnante donnée et ses voisines appartenant à la même commune voisine (valeur (A) dans la Table n°3) et d’un autre côté la moyenne des distances statistiques entre une commune fusionnante donnée et les voisines avec lesquelles elle ne fusionne pas (B). La différence entre ces deux valeurs (B-A) nous renseigne alors sur la plus grande proximité de la commune donnée, soit avec les voisines avec lesquelles elle fusionne, soit avec les voisines avec lesquelles elle ne fusionne pas. Quand cette différence (B-A) est positive, la commune fusionnante est statistiquement plus proche des communes avec lesquelles elle a fusionné que des autres communes voisines avec lesquelles elle n’a pas fusionné. En revanche, quand la différence est négative, cela veut dire que la distance statistique entre communes ayant fusionné entre elles est plus importante que la distance statistique avec ses communes voisines. Les résultats seront présentés dans la section 2.2.
# Si on part du package rgeoda
queen_w <- queen_weights(test_geom, order=1, include_lower_order = FALSE, precision_threshold = 0)
# On crée le vecteur qui va abriter les résultats pour l'ensemble des variables
tableau_synth <- data.frame()
class(liste_variables)
## [1] "list"
variables_a_etudier <- liste_variables[3]
class(variables_a_etudier)
## [1] "list"
for (variables_a_etudier in liste_variables) {
variables_a_etudier <-unlist(variables_a_etudier)
test_data <- test_geom[, c("CODGEO", "CODGEO_new", "LIBGEO", "LIBGEO_new", "COM_NOUV", variables_a_etudier)]
st_geometry(test_data) <- NULL
test_data_Cfus <- subset(test_data, test_data$COM_NOUV == "OUI")
resultats <- data.frame() # Pour accueillir les résultats
CODGEO_com<- test_data_Cfus$CODGEO[10] # Pour tests
for (CODGEO_com in test_data_Cfus$CODGEO) { # Pour chaque commune ayant fusionné
# On identifie la commune
numcom <- which(test_data$CODGEO==CODGEO_com)
CODGEO_new_com <- test_data$CODGEO_new[numcom]
# On liste les voisines, par l'identifiant de leur ligne
numvoisines <- get_neighbors(queen_w, idx = numcom)
# CODGEO_voisines <- test_data$CODGEO[numvoisines]
nbr_voisines <- length(numvoisines)
# num_voisine <- numvoisines[2]
# test_data$CODGEO[numvoisines]
# On sélectionne uniquement les communes limitrophes
test_data_subset <- test_data[numvoisines,]
# On renseigne, dans un nouveau champs, si ces communes appartiennent à la même commune nouvelle ou non
test_data_subset$lien <- ifelse(test_data_subset$CODGEO_new == CODGEO_new_com,# Si le CODGEO_new de la commune est le même que celui de la commune fusionnante qu'on étudie
"meme_CN", # Si oui, on indique que c'est la même commune
"pas_meme_CN" # Si non, on l'indique
)
result_dist <- c() # Pour archiver les résultats de distance
CODGEO_voisine <- test_data_subset$CODGEO[2]
for (CODGEO_voisine in test_data_subset$CODGEO ) { # Pour chaque commune voisine
tmp <- subset(test_data, test_data$CODGEO == CODGEO_voisine |
test_data$CODGEO == CODGEO_com)
dist <- dist(tmp[, variables_a_etudier], method = "euclidian")
result_dist <- c(result_dist, dist)
} # Fin boucle calcul distance avec chacune des voisines
test_data_subset$dist <- result_dist
# On fait deux tableaux différents pour être certains que les moyennes ne se mélangent pas si les vecteurs n'ont pas le même ordre
test_data_subset_meme_CN <- subset(test_data_subset, lien == "meme_CN")
nbr_voisines_fus <- nrow(test_data_subset_meme_CN) # On compte le nombre de voisines appartenant à la même CN
test_data_subset_pas_meme_CN <- subset(test_data_subset, lien == "pas_meme_CN")
nbr_voisines_Nfus <- nrow(test_data_subset_pas_meme_CN) # On compte le nombre d'autres voisines
com_etud <- c(CODGEO_com, nbr_voisines, nbr_voisines_fus, nbr_voisines_Nfus, mean(test_data_subset_meme_CN$dist), mean(test_data_subset_pas_meme_CN$dist))
resultats <- rbind(resultats, com_etud, stringsAsFactors = FALSE)
} # Fin boucle pour une commune
# NB : Pourrait valoir le coup de standardiser les données, mais à voir à quel moment...
colnames(resultats) <- c("CODGEO", "Nombre de voisines", "Nombre de voisines avec lesquelles la commune a fusionné", "Nombre de voisines avec lesquelles la commune n'a pas fusionné", "Moyenne de la distance euclidienne avec les communes avec lesquelles la commune a fusionné", "Moyenne de la distance euclidienne avec les communes avec lesquelles la commune n'a pas fusionné")
# assign(paste0("Compar_moy_", variable), results)
# On passe les variables en numérique
resultats[2:ncol(resultats)] <- apply(resultats[2:ncol(resultats)], 2, as.numeric)
summary(resultats)
# On crée une variable indiquant la différence
resultats$Différence <- resultats$`Moyenne de la distance euclidienne avec les communes avec lesquelles la commune n'a pas fusionné` - resultats$`Moyenne de la distance euclidienne avec les communes avec lesquelles la commune a fusionné`
result_variable <- c(paste(variables_a_etudier, collapse = "_"), mean(resultats[,5], na.rm = TRUE), mean(resultats[,6], na.rm = TRUE))
tableau_synth <- rbind(tableau_synth, result_variable, stringsAsFactors = FALSE)
pr_carto <- merge(geom2011, resultats, by = "CODGEO")
pr_carto <- merge(pr_carto, df2011[, c("CODGEO", "REG")], by = "CODGEO")
# pr_carto <- subset(pr_carto, REG == "23" | REG == "25"| REG == "53"| REG == "52") # Normandies, Bretagne, Pays-de-la-Loire
pr_carto <- subset(pr_carto, REG == "23"| REG == "25") # Normandies
# Carte distance euclidienne communes fusionnant ensemble
# choroLayer(x = pr_carto , var = "Moyenne de la distance euclidienne avec les communes avec lesquelles la commune a fusionné",
# col = carto.pal(pal1 = "blue.pal", n1 = 4), method = "quantile", nclass = 4,
# legend.values.rnd = 2, legend.pos = "topleft",
# legend.title.txt = paste0("Moyenne de la distance euclidienne\nentre les communes fusionnant ensemble\n", result_variable[1]),
# legend.title.cex = 1, legend.values.cex = 0.8)
# layoutLayer(
# # title = "La moyenne de la distance euclidienne avec les communes fusionnant entre elles",
# #coltitle = "black",
# sources = "Source : INSEE, 2024", scale = NULL,
# author = "Auteur : G. Bideau.", frame ="", col = NA)
# plot(dep$geom, col = NA, lwd = 1, add = TRUE)
# Carte distance euclidienne communes ne fusionnant pas ensemble
# choroLayer(x = pr_carto , var = "Moyenne de la distance euclidienne avec les communes avec lesquelles la commune n'a pas fusionné",
# col = carto.pal(pal1 = "blue.pal", n1 = 4), method = "quantile", nclass = 4,
# legend.values.rnd = 2, legend.pos = "topleft",
# legend.title.txt = paste0("Moyenne de la distance euclidienne\nentre les communes ne fusionnant pas ensemble\n", result_variable[1]),
# legend.title.cex = 1, legend.values.cex = 0.8)
# layoutLayer(title = "La moyenne de la distance euclidienne avec les communes ne fusionnant pas entre elles",
# #coltitle = "black",
# sources = "Source : INSEE, 2024", scale = NULL, author = "Auteur : G. Bideau.", frame ="", col = NA)
# plot(dep$geom, col = NA, lwd = 1, add = TRUE)
# Carte différence des distances euclidiennes
choroLayer(x = pr_carto , var = "Différence",
col = carto.pal(pal1 = "red.pal", n1 = 2, pal2 = "blue.pal", n2 = 2), method = "quantile", nclass = 4,
legend.values.rnd = 2, legend.pos = "topleft",
legend.title.txt = paste0("Différence de distance euclidienne\n(communes avec lesquelles elle n'a pas fusionné\n- communes avec lesquelles elle a fusionné)\n", result_variable[1]),
legend.title.cex = 1, legend.values.cex = 0.8)
layoutLayer(
# title = "Différence de distance euclidienne\n(communes avec lesquelles elle a fusionné\n- communes avec lesquelles elle a fusionné)",
#coltitle = "black",
sources = "Source : INSEE, 2024", scale = NULL, author = "Auteur : G. Bideau.", frame ="", col = NA)
plot(dep$geom, col = NA, lwd = 1, add = TRUE)
assign(paste0("dist_eucl_", result_variable[1]), resultats)
}
colnames(tableau_synth) <- c("Variable(s) étudiée(s)", "Même commune nouvelle", "Voisine mais pas de fusion")
tableau_synth[2:3] <- apply(tableau_synth[2:3], 2, as.numeric)
tableau_synth$Différence <- tableau_synth$`Voisine mais pas de fusion` - tableau_synth$`Même commune nouvelle`
kable(tableau_synth[c(2:4, 1)], digits=2)
| Même commune nouvelle | Voisine mais pas de fusion | Différence | Variable(s) étudiée(s) |
|---|---|---|---|
| 3.16 | 3.22 | 0.07 | P09_CHOM1564_RT |
| 14.10 | 13.53 | -0.57 | C09_ACTOCC_OUT_RT |
| 6.01 | 6.23 | 0.22 | P11_FoyFisc_Imp_RT |
| 6.08 | 6.28 | 0.19 | C09_ACT1564_Agr_RT |
| 10.90 | 11.38 | 0.48 | superficie |
| 3.41 | 3.55 | 0.14 | P09_POP0014Y_RT |
| 2.88 | 2.95 | 0.08 | P09_POP1529Y_RT |
| 3.29 | 3.57 | 0.28 | P09_POP6074Y_RT |
| 1265.06 | 1382.08 | 117.02 | P09_POP |
| 10.60 | 11.29 | 0.69 | PR2012_T1_Abst_prct_insc_PR2012_T1_prct_insc_LE.PEN_PR2012_T1_prct_insc_SARKOZY_PR2012_T1_prct_insc_MÉLENCHON_PR2012_T1_prct_insc_BAYROU_PR2012_T1_prct_insc_HOLLANDE |
| 10.56 | 11.21 | 0.65 | PR2017_T1_Abst_prct_insc_PR2017_T1_prct_insc_LE.PEN_PR2017_T1_prct_insc_FILLON_PR2017_T1_prct_insc_MÉLENCHON_PR2017_T1_prct_insc_MACRON_PR2017_T1_prct_insc_HAMON |
| 9.19 | 9.99 | 0.79 | PR2022_T1_Abst_prct_insc_PR2022_T1_prct_insc_LE.PEN_PR2022_T1_prct_insc_MACRON_PR2022_T1_prct_insc_MÉLENCHON_PR2022_T1_prct_insc_ZEMMOUR |
| 3.89 | 4.38 | 0.49 | PR2022_T1_Abst_prct_insc |
| 4.07 | 4.47 | 0.40 | PR2022_T1_prct_insc_LE.PEN |
| 4.04 | 4.19 | 0.15 | PR2022_T1_prct_insc_MACRON |
| 3.15 | 3.40 | 0.25 | PR2022_T1_prct_insc_MÉLENCHON |
| 1.76 | 1.90 | 0.14 | PR2022_T1_prct_insc_ZEMMOUR |
| 61.13 | 62.66 | 1.53 | dgf_prct_charge_prct_perso_prct_depinv_prct_equip_prct_dette_prct |
| 9.88 | 10.48 | 0.60 | dgf_prct |
| 17.22 | 17.56 | 0.34 | charge_prct |
| 9.31 | 9.60 | 0.28 | perso_prct |
| 17.22 | 17.56 | 0.34 | depinv_prct |
| 17.50 | 17.79 | 0.29 | equip_prct |
| 42.55 | 43.68 | 1.13 | dette_prct |
| 17.42 | 16.96 | -0.46 | P09_CHOM1564_RT_C09_ACTOCC_OUT_RT_C09_ACT1564_Agr_RT |
rm (com_etud, nbr_voisines, nbr_voisines_fus, nbr_voisines_Nfus, CODGEO_com, numvoisines, numcom)
Le tableau final permet d’observer la différence entre la distance statistique d’une commune avec ses voisines avec lesquelles elle n’a pas fusionné et celles avec lesquelles elle a fusionné. Cela signifie que quand cette différence est positive, la commune fusionnante est statistiquement plus proche des communes avec lesquelles elle a fusionné que des autres communes voisines avec lesquelles elle n’a pas fusionné. En revanche, quand la différence est négative, cela veut dire que la distance statistique entre communes ayant fusionné entre elles est plus importante que la distance statistique avec les communes voisines (et ce, que la différence soit positive ou négative d’ailleurs).
La quasi totalité des différences sur les variables étant positives, on en conclu que les communes fusionnantes ont quand même tendance à fusionner plutôt avec des communes plus proches, donc davantage sur une logique homogène. La seule variable qui dénote est le taux d’actifs occupés hors de la commune de résidence, variable décidémment très particulière.
On réalise ici une série de boxplots permettant d’observer si la distance statistique varie lorsqu’on discrétise en fonction du ZAU ou de l’appartenance régionale. Globalement, peu de différences, quelles que soient ces variables.
variables_a_etudier <- liste_variables[9]
variables_a_etudier <- liste_variables[2]
for (variables_a_etudier in liste_variables_uniques_sans_polit) {# Pour une variable donnée
tableau <- get(paste0("dist_eucl_", variables_a_etudier)) # On sélectionne les données concernant la distance euclidienne
colnames(tableau)
pr_graph <- melt(tableau[, c("CODGEO",
"Moyenne de la distance euclidienne avec les communes avec lesquelles la commune a fusionné",
"Moyenne de la distance euclidienne avec les communes avec lesquelles la commune n'a pas fusionné")],
id.vars = "CODGEO")
pr_graph <- merge(pr_graph, df2011[, c("CODGEO", "CATAEU2010", "CODE_DEPT", "REG")], by = "CODGEO")
labels_variable <- c("Communes avec lesquelles\nla commune a fusionné", "Communes avec lesquelles\nla commune n'a pas fusionné")
boxplot <- ggplot(pr_graph, aes(x = CATAEU2010, y = value, color = variable)) +
geom_boxplot(varwidth = FALSE) +
# scale_color_manual(values=couleurs , labels = labels_COM_NOUV) +
ylab(paste0("Moyenne de la distance euclidienne\npour l'ensemble des communes fusionnantes")) +
xlab("Code ZAU") +
scale_color_manual(values = c("red", "blue"), labels = labels_variable) +
ggtitle(paste0("Comparaison des moyennes des distances statistiques\n", variables_a_etudier))
# print (boxplot)
# On modifie éventuellement le graphique pour le rendre plus lisible si valeurs extrêmes
pr_calculs <- c(tableau$`Moyenne de la distance euclidienne avec les communes avec lesquelles la commune a fusionné`, tableau$`Moyenne de la distance euclidienne avec les communes avec lesquelles la commune n'a pas fusionné`)
upper.limit <- quantile(pr_calculs, na.rm = TRUE)[4] + 20*IQR(pr_calculs, na.rm = TRUE)
lower.limit <- quantile(pr_calculs, na.rm = TRUE)[2] - 20*IQR(pr_calculs, na.rm = TRUE)
print(boxplot + coord_cartesian(ylim=c(0, upper.limit)))
# Possibilité de vérifier la fiabilité des données avec le test de Kruskal-Wallis
## https://www.datanovia.com/en/fr/lessons/test-de-kruskal-wallis-dans-r/
# res.kruskal <- pr_graph %>% kruskal_test(value ~ CATAEU2010)
# print(as.data.frame(res.kruskal))
boxplot <- ggplot(pr_graph, aes(x = REG, y = value, color = variable)) +
geom_boxplot(varwidth = FALSE) +
# scale_color_manual(values=couleurs , labels = labels_COM_NOUV) +
ylab(paste0("Moyenne de la distance euclidienne\npour l'ensemble des communes fusionnantes")) +
xlab("Région") +
scale_color_manual(values = c("red", "blue"), labels = labels_variable) +
ggtitle(paste0("Comparaison des moyennes des distances statistiques\n", variables_a_etudier))
# print (boxplot)
print(boxplot + coord_cartesian(ylim=c(0, upper.limit)))
}
Pour observer si les voisines d’une commune fusionnante avec lesquelles elle fusionne sont plus ou moins favorisées que les voisines avec lesquelles elle ne fusionne pas, il est possible, de manière exploratoire, d’observer pour certaines variables si les unes ou les autres ont généralement des valeurs plus ou moins élevées.
# Si on part du package rgeoda
queen_w <- queen_weights(test_geom, order=1, include_lower_order = FALSE, precision_threshold = 0)
# On crée le vecteur qui va abriter les résultats pour l'ensemble des variables
tableau_synth <- data.frame()
variables_a_etudier <- liste_variables_uniques[9]
for (variables_a_etudier in liste_variables_uniques) {
test_data <- test_geom[, c("CODGEO", "CODGEO_new", "LIBGEO", "LIBGEO_new", "COM_NOUV", variables_a_etudier)]
st_geometry(test_data) <- NULL
test_data_Cfus <- subset(test_data, test_data$COM_NOUV == "OUI")
resultats <- data.frame() # Pour accueillir les résultats
CODGEO_com <- test_data_Cfus$CODGEO[10] # Pour tests
for (CODGEO_com in test_data_Cfus$CODGEO) { # Pour chaque commune ayant fusionné
# On identifie la commune
numcom <- which(test_data$CODGEO==CODGEO_com)
CODGEO_new_com <- test_data$CODGEO_new[numcom]
# On liste les voisines, par l'identifiant de leur ligne
numvoisines <- get_neighbors(queen_w, idx = numcom)
# CODGEO_voisines <- test_data$CODGEO[numvoisines]
nbr_voisines <- length(numvoisines)
# num_voisine <- numvoisines[2]
# test_data$CODGEO[numvoisines]
# On sélectionne uniquement les communes limitrophes
test_data_subset <- test_data[numvoisines,]
# On renseigne, dans un nouveau champs, si ces communes appartiennent à la même commune nouvelle ou non
test_data_subset$lien <- ifelse(test_data_subset$CODGEO_new == CODGEO_new_com,# Si le CODGEO_new de la commune est le même que celui de la commune fusionnante qu'on étudie
"meme_CN", # Si oui, on indique que c'est la même commune
"pas_meme_CN" # Si non, on l'indique
)
# On crée des tableaux pour les communes fusionnant ensemble et pour les autres. Dans chaque cas, on fait la moyenne et on compte le nombre de communes
test_data_subset_meme_CN <- subset(test_data_subset, lien == "meme_CN")
nbr_voisines_fus <- nrow(test_data_subset_meme_CN) # On compte le nombre de voisines appartenant à la même CN
moy_comfus <- mean(test_data_subset_meme_CN[, variables_a_etudier])
test_data_subset_pas_meme_CN <- subset(test_data_subset, lien == "pas_meme_CN")
nbr_voisines_Nfus <- nrow(test_data_subset_pas_meme_CN) # On compte le nombre d'autres voisines
moy_comNfus <- mean(test_data_subset_pas_meme_CN[, variables_a_etudier])
# On calcule la différence. Si le résultat est positif, les communes noun fusionnantes sont mieux dotées, si le résultat est positif, les communes fusionnantes sont mieux dotées, si le résultat est proche de zéro (regarder l'ordre de grandeur avec les moyennes données), il y a peu de différence
difference_moy = moy_comNfus - moy_comfus
# On sauvegarde les résultats
com_etud <- c(CODGEO_com, nbr_voisines, nbr_voisines_fus, nbr_voisines_Nfus, moy_comfus, moy_comNfus, difference_moy)
resultats <- rbind(resultats, com_etud, stringsAsFactors = FALSE)
} # Fin boucle pour une commune
# NB : Pourrait valoir le coup de standardiser les données, mais à voir à quel moment...
colnames(resultats) <- c("CODGEO", "Nombre de voisines", "Nombre de voisines avec lesquelles la commune a fusionné", "Nombre de voisines avec lesquelles la commune n'a pas fusionné", "Moyenne des communes avec lesquelles la commune a fusionné", "Moyenne des communes avec lesquelles la commune n'a pas fusionné", "Différence (Nfus - Cfus)")
# assign(paste0("Compar_moy_", variable), results)
# On passe les variables en numérique
resultats[2:ncol(resultats)] <- apply(resultats[2:ncol(resultats)], 2, as.numeric)
summary(resultats)
result_variable <- c(paste(variables_a_etudier, collapse = "_"), mean(resultats[,5], na.rm = TRUE), mean(resultats[,6], na.rm = TRUE), median(resultats[,5], na.rm = TRUE), median(resultats[,6], na.rm = TRUE))
tableau_synth <- rbind(tableau_synth, result_variable, stringsAsFactors = FALSE)
pr_carto <- merge(geom2011, resultats, by = "CODGEO")
pr_carto <- merge(pr_carto, df2011[, c("CODGEO", "REG")], by = "CODGEO")
# pr_carto <- subset(pr_carto, REG == "23" | REG == "25"| REG == "53"| REG == "52") # Normandies, Bretagne, Pays-de-la-Loire
pr_carto <- subset(pr_carto, REG == "23"| REG == "25") # Normandies
choroLayer(x = pr_carto , var = "Différence (Nfus - Cfus)",
col = carto.pal(pal1 = "red.pal", n1 = 2, pal2 = "blue.pal", n2 = 2), method = "quantile", nclass = 4,
legend.values.rnd = 2, legend.pos = "topleft",
legend.title.txt = paste0("Différence des moyennes\n(communes avec lesquelles elle n'a pas fusionné\n- communes avec lesquelles elle a fusionné)\n", result_variable[1]),
legend.title.cex = 1, legend.values.cex = 0.8)
layoutLayer(
# title = "Différence de distance euclidienne\n(communes avec lesquelles elle a fusionné\n- communes avec lesquelles elle a fusionné)",
#coltitle = "black",
sources = "Source : INSEE, 2024", scale = NULL, author = "Auteur : G. Bideau.", frame ="", col = NA)
plot(dep$geom, col = NA, lwd = 1, add = TRUE)
assign(paste0("dist_eucl_", result_variable[1]), resultats)
}
tableau_synth[2:5] <- apply(tableau_synth[2:5], 2, as.numeric)
colnames(tableau_synth) <- c("Variable(s) étudiée(s)", "Moyenne même commune nouvelle", "Moyenne voisines mais pas de fusion", "Médiane même commune nouvelle", "Médiane voisines mais pas de fusion")
tableau_synth$Différence_moyenne <- tableau_synth$`Moyenne voisines mais pas de fusion` - tableau_synth$`Moyenne même commune nouvelle`
tableau_synth$Différence_médiane <- tableau_synth$`Médiane voisines mais pas de fusion` - tableau_synth$`Médiane même commune nouvelle`
kable(tableau_synth[c(2:7, 1)], digits=2)
| Moyenne même commune nouvelle | Moyenne voisines mais pas de fusion | Médiane même commune nouvelle | Médiane voisines mais pas de fusion | Différence_moyenne | Différence_médiane | Variable(s) étudiée(s) |
|---|---|---|---|---|---|---|
| 8.23 | 8.08 | 7.85 | 7.77 | -0.15 | -0.08 | P09_CHOM1564_RT |
| 73.60 | 73.90 | 76.08 | 75.59 | 0.29 | -0.48 | C09_ACTOCC_OUT_RT |
| 51.02 | 51.13 | 50.25 | 50.64 | 0.11 | 0.39 | P11_FoyFisc_Imp_RT |
| 6.34 | 7.08 | 4.28 | 5.37 | 0.74 | 1.09 | C09_ACT1564_Agr_RT |
| 16.39 | 18.88 | 13.45 | 15.89 | 2.49 | 2.44 | superficie |
| 19.43 | 19.38 | 19.77 | 19.60 | -0.05 | -0.16 | P09_POP0014Y_RT |
| 14.67 | 14.45 | 14.71 | 14.60 | -0.23 | -0.11 | P09_POP1529Y_RT |
| 14.70 | 14.92 | 14.22 | 14.33 | 0.22 | 0.11 | P09_POP6074Y_RT |
| 1267.08 | 1442.01 | 654.00 | 709.89 | 174.93 | 55.89 | P09_POP |
| 14.84 | 14.82 | 14.55 | 14.63 | -0.03 | 0.08 | PR2012_T1_Abst_prct_insc |
| 16.37 | 16.67 | 16.02 | 16.43 | 0.30 | 0.41 | PR2012_T1_prct_insc_LE.PEN |
| 24.12 | 23.96 | 24.12 | 23.71 | -0.17 | -0.41 | PR2012_T1_prct_insc_SARKOZY |
| 8.23 | 8.32 | 7.74 | 8.05 | 0.09 | 0.31 | PR2012_T1_prct_insc_MÉLENCHON |
| 8.77 | 8.72 | 8.48 | 8.54 | -0.06 | 0.06 | PR2012_T1_prct_insc_BAYROU |
| 20.20 | 20.13 | 19.67 | 19.66 | -0.08 | -0.02 | PR2012_T1_prct_insc_HOLLANDE |
| 16.69 | 16.34 | 16.54 | 16.21 | -0.35 | -0.33 | PR2017_T1_Abst_prct_insc |
| 19.81 | 20.11 | 19.45 | 19.73 | 0.30 | 0.28 | PR2017_T1_prct_insc_LE.PEN |
| 17.58 | 17.60 | 17.35 | 17.07 | 0.02 | -0.28 | PR2017_T1_prct_insc_FILLON |
| 13.46 | 13.56 | 12.91 | 13.21 | 0.10 | 0.31 | PR2017_T1_prct_insc_MÉLENCHON |
| 17.30 | 17.10 | 17.05 | 16.90 | -0.20 | -0.15 | PR2017_T1_prct_insc_MACRON |
| 4.28 | 4.27 | 4.08 | 4.10 | -0.01 | 0.02 | PR2017_T1_prct_insc_HAMON |
| 21.75 | 20.73 | 21.81 | 20.73 | -1.02 | -1.08 | PR2022_T1_Abst_prct_insc |
| 21.42 | 21.85 | 21.05 | 21.75 | 0.42 | 0.70 | PR2022_T1_prct_insc_LE.PEN |
| 21.64 | 21.38 | 21.37 | 21.00 | -0.25 | -0.37 | PR2022_T1_prct_insc_MACRON |
| 12.37 | 12.53 | 11.76 | 12.06 | 0.16 | 0.30 | PR2022_T1_prct_insc_MÉLENCHON |
| 4.49 | 4.73 | 4.21 | 4.54 | 0.24 | 0.33 | PR2022_T1_prct_insc_ZEMMOUR |
| 24.28 | 24.25 | 23.21 | 23.44 | -0.03 | 0.23 | dgf_prct |
| 64.51 | 63.96 | 65.50 | 64.35 | -0.55 | -1.15 | charge_prct |
| 22.53 | 22.46 | 22.40 | 22.73 | -0.07 | 0.33 | perso_prct |
| 35.49 | 36.04 | 34.50 | 35.65 | 0.55 | 1.15 | depinv_prct |
| 27.20 | 28.03 | 25.54 | 27.52 | 0.82 | 1.98 | equip_prct |
| 57.04 | 54.22 | 52.40 | 51.54 | -2.82 | -0.87 | dette_prct |
kable(tableau_synth, digits=2)
| Variable(s) étudiée(s) | Moyenne même commune nouvelle | Moyenne voisines mais pas de fusion | Médiane même commune nouvelle | Médiane voisines mais pas de fusion | Différence_moyenne | Différence_médiane |
|---|---|---|---|---|---|---|
| P09_CHOM1564_RT | 8.23 | 8.08 | 7.85 | 7.77 | -0.15 | -0.08 |
| C09_ACTOCC_OUT_RT | 73.60 | 73.90 | 76.08 | 75.59 | 0.29 | -0.48 |
| P11_FoyFisc_Imp_RT | 51.02 | 51.13 | 50.25 | 50.64 | 0.11 | 0.39 |
| C09_ACT1564_Agr_RT | 6.34 | 7.08 | 4.28 | 5.37 | 0.74 | 1.09 |
| superficie | 16.39 | 18.88 | 13.45 | 15.89 | 2.49 | 2.44 |
| P09_POP0014Y_RT | 19.43 | 19.38 | 19.77 | 19.60 | -0.05 | -0.16 |
| P09_POP1529Y_RT | 14.67 | 14.45 | 14.71 | 14.60 | -0.23 | -0.11 |
| P09_POP6074Y_RT | 14.70 | 14.92 | 14.22 | 14.33 | 0.22 | 0.11 |
| P09_POP | 1267.08 | 1442.01 | 654.00 | 709.89 | 174.93 | 55.89 |
| PR2012_T1_Abst_prct_insc | 14.84 | 14.82 | 14.55 | 14.63 | -0.03 | 0.08 |
| PR2012_T1_prct_insc_LE.PEN | 16.37 | 16.67 | 16.02 | 16.43 | 0.30 | 0.41 |
| PR2012_T1_prct_insc_SARKOZY | 24.12 | 23.96 | 24.12 | 23.71 | -0.17 | -0.41 |
| PR2012_T1_prct_insc_MÉLENCHON | 8.23 | 8.32 | 7.74 | 8.05 | 0.09 | 0.31 |
| PR2012_T1_prct_insc_BAYROU | 8.77 | 8.72 | 8.48 | 8.54 | -0.06 | 0.06 |
| PR2012_T1_prct_insc_HOLLANDE | 20.20 | 20.13 | 19.67 | 19.66 | -0.08 | -0.02 |
| PR2017_T1_Abst_prct_insc | 16.69 | 16.34 | 16.54 | 16.21 | -0.35 | -0.33 |
| PR2017_T1_prct_insc_LE.PEN | 19.81 | 20.11 | 19.45 | 19.73 | 0.30 | 0.28 |
| PR2017_T1_prct_insc_FILLON | 17.58 | 17.60 | 17.35 | 17.07 | 0.02 | -0.28 |
| PR2017_T1_prct_insc_MÉLENCHON | 13.46 | 13.56 | 12.91 | 13.21 | 0.10 | 0.31 |
| PR2017_T1_prct_insc_MACRON | 17.30 | 17.10 | 17.05 | 16.90 | -0.20 | -0.15 |
| PR2017_T1_prct_insc_HAMON | 4.28 | 4.27 | 4.08 | 4.10 | -0.01 | 0.02 |
| PR2022_T1_Abst_prct_insc | 21.75 | 20.73 | 21.81 | 20.73 | -1.02 | -1.08 |
| PR2022_T1_prct_insc_LE.PEN | 21.42 | 21.85 | 21.05 | 21.75 | 0.42 | 0.70 |
| PR2022_T1_prct_insc_MACRON | 21.64 | 21.38 | 21.37 | 21.00 | -0.25 | -0.37 |
| PR2022_T1_prct_insc_MÉLENCHON | 12.37 | 12.53 | 11.76 | 12.06 | 0.16 | 0.30 |
| PR2022_T1_prct_insc_ZEMMOUR | 4.49 | 4.73 | 4.21 | 4.54 | 0.24 | 0.33 |
| dgf_prct | 24.28 | 24.25 | 23.21 | 23.44 | -0.03 | 0.23 |
| charge_prct | 64.51 | 63.96 | 65.50 | 64.35 | -0.55 | -1.15 |
| perso_prct | 22.53 | 22.46 | 22.40 | 22.73 | -0.07 | 0.33 |
| depinv_prct | 35.49 | 36.04 | 34.50 | 35.65 | 0.55 | 1.15 |
| equip_prct | 27.20 | 28.03 | 25.54 | 27.52 | 0.82 | 1.98 |
| dette_prct | 57.04 | 54.22 | 52.40 | 51.54 | -2.82 | -0.87 |
rm (com_etud, nbr_voisines, nbr_voisines_fus, nbr_voisines_Nfus, CODGEO_com, numvoisines, numcom)
En observant la différence entre les communes voisines d’une commune fusionnante, selon qu’elles ont fusionné avec ou non, on observe tout d’abord des différences très variables d’une commune à l’autre. Les moyennes ou médianes globales font apparaître peu de différence.
Cela irait dans le sens de fusions qui ne se feraient pas pour se joindre systématiquement à des communes plus favorisées (ou moins d’ailleurs).
On réalise ici une série de boxplots permettant d’observer si la distance statistique varie lorsqu’on discrétise en fonction du ZAU ou de l’appartenance régionale. Globalement, peu de différences, quelles que soient ces variables.
variables_a_etudier <- liste_variables[9]
variables_a_etudier <- liste_variables[5]
for (variables_a_etudier in liste_variables_uniques) {# Pour une variable donnée
tableau <- get(paste0("dist_eucl_", variables_a_etudier)) # On sélectionne les données concernant la distance euclidienne
colnames(tableau)
# On crée un tableau adapté pour les graphiques
pr_graph <- melt(tableau[, c("CODGEO",
"Moyenne des communes avec lesquelles la commune a fusionné",
"Moyenne des communes avec lesquelles la commune n'a pas fusionné")],
id.vars = "CODGEO")
pr_graph <- merge(pr_graph, df2011[, c("CODGEO", "CATAEU2010", "CODE_DEPT", "REG")], by = "CODGEO")
# labels_variable <- c("Communes avec lesquelles\nla commune a fusionné", "Communes avec lesquelles\nla commune n'a pas fusionné")
labels_variable <- c("Communes avec\nlesquelles la\ncommune a\nfusionné", "Communes avec\nlesquelles la\ncommune n'a\npas fusionné")
boxplot <- ggplot(pr_graph, aes(x = CATAEU2010, y = value, color = variable)) +
geom_boxplot(varwidth = FALSE) + # Pour faire varier la taille en fonction des effectifs
# scale_color_manual(values=couleurs , labels = labels_COM_NOUV) +
ylab(paste0("Valeur moyenne")) +
xlab("Code ZAU") +
scale_color_manual(name = " ", values = c("red", "blue"), labels = labels_variable) +
ggtitle(paste0("Comparaison des moyennes\n", variables_a_etudier))
# print (boxplot)
# On modifie éventuellement le graphique pour le rendre plus lisible si valeurs extrêmes
pr_calculs <- pr_graph$value
upper.limit <- quantile(pr_calculs, na.rm = TRUE)[4] + 4*IQR(pr_calculs, na.rm = TRUE)
lower.limit <- quantile(pr_calculs, na.rm = TRUE)[2] - 4*IQR(pr_calculs, na.rm = TRUE)
print(boxplot + coord_cartesian(ylim=c(0, upper.limit)))
# print(boxplot + coord_cartesian(ylim=c(0, 30000)) + ylab(paste0("Population moyenne")) + ggtitle(NULL) + scale_x_discrete(labels = CategZAU) + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + xlab(NULL)) # Pour graphique thèse
# print(boxplot + coord_cartesian(ylim=c(0, 80)) + ylab(paste0("Superficie moyenne")) + ggtitle(NULL) + scale_x_discrete(labels = CategZAU) + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + xlab(NULL)) # Pour graphique thèse
# Possibilité de vérifier la fiabilité des données avec le test de Kruskal-Wallis
## https://www.datanovia.com/en/fr/lessons/test-de-kruskal-wallis-dans-r/
# res.kruskal <- pr_graph %>% kruskal_test(value ~ CATAEU2010)
# print(as.data.frame(res.kruskal))
boxplot <- ggplot(pr_graph, aes(x = REG, y = value, color = variable)) +
geom_boxplot(varwidth = FALSE) + # Pour faire varier la taille en fonction des effectifs
# scale_color_manual(values=couleurs , labels = labels_COM_NOUV) +
ylab(paste0("Valeur moyenne")) +
xlab("Région") +
scale_color_manual(name = " ", values = c("red", "blue"), labels = labels_variable) +
ggtitle(paste0("Comparaison des moyennes\n", variables_a_etudier))
# print (boxplot)
print(boxplot + coord_cartesian(ylim=c(0, upper.limit)))
}